﻿using System.Text;

namespace RSA.Console
{
    using Core;
    using Console=System.Console;

    class Program
    {
        static void Main(string[] args)
        {
            CryptoKey privateKey;
            CryptoKey publicKey;
            ICryptoProvider cryptoProvider = new RSACryptoProvider();
            var asciiEncoding = new ASCIIEncoding();
            
            Console.WriteLine("Введите длину ключа:");
            var keyLengthString = Console.ReadLine();
            var keyLength = int.Parse(keyLengthString);

            cryptoProvider.GenerateKeys(keyLength, out publicKey, out privateKey);

            Console.WriteLine("Публичный ключ: ({0},{1})", publicKey.Factor, publicKey.Modulus);
            Console.WriteLine("Приватный ключ: ({0},{1})", privateKey.Factor, privateKey.Modulus);

            Console.WriteLine("Введите сообщение для кодирования:");
            var stringToEncrypt = Console.ReadLine();
            
            var dataToEncrypt = asciiEncoding.GetBytes(stringToEncrypt);
            var encryptedData = cryptoProvider.Encrypt(dataToEncrypt, publicKey);
            
            var encryptedString = asciiEncoding.GetString(encryptedData);
            Console.WriteLine("Закодированная строка: {0}", encryptedString);

            var decryptedData = cryptoProvider.Decrypt(encryptedData, privateKey);

            var decryptedString = asciiEncoding.GetString(decryptedData);
            Console.WriteLine("Разкодированная строка: {0}", decryptedString);

            Console.ReadKey();
        }
    }
}
